﻿#include "jsontest.h"

JsonTest::JsonTest()
{
    m_fileName = "test.json";
}


void JsonTest::createJson()
{
    // 构建 JSON 对象
    QJsonObject json;
    json.insert("Name", "Qt");
    json.insert("From", 1991);
    json.insert("Cross Platform", true);

    // 构建 JSON 数组
    QJsonArray jsonArr;
    jsonArr.append("Qt");
    jsonArr.append(5.7);
    jsonArr.append(true);
    json.insert("other", QJsonValue(jsonArr));

    // 构建 JSON 文档
    QJsonDocument document;
    document.setObject(json);  // setArray(jsonArr);

    QFile f(m_fileName);
    if (!f.open(QIODevice::ReadWrite))
    {
        qDebug() << "error";
    }
    else
    {
        qDebug() << "ok";
        QTextStream out(&f);
        out << document.toJson(); //QJsonDocument::Compact
        f.close();
    }
}

void JsonTest::parseJson()
{
    QByteArray text;
    QFile f(m_fileName);
    if (!f.open(QIODevice::ReadWrite))
    {
        qDebug() << "error";
    }
    else
    {
        qDebug() << "read";
        QTextStream out(&f);
        QString line;
        do {
            line = out.readLine();
            qDebug() << line;
            text.append(line);
        } while (!line.isNull());

        f.close();
    }

    //解析Json文档
    QJsonParseError jsonError;
    QJsonDocument doucment =QJsonDocument::fromJson(text, &jsonError);  // 转化为 JSON 文档
    if (!doucment.isNull() && (jsonError.error ==QJsonParseError::NoError))
    {
        // 解析未发生错误
        if(doucment.isObject())   //isArray()
        {
            // JSON 文档为对象
            QJsonObject object = doucment.object();  // 转化为对象  array()
            if(object.contains("Name"))
            {
                //包含指定的 key
               QJsonValue value = object.value("Name");  // 获取指定 key 对应的 value
                if(value.isString())
                {
                   // 判断 value 是否为字符串
                   QString strName = value.toString(); // 将 value 转化为字符串
                   qDebug() << "Name : " << strName;
                }
            }
            if (object.contains("From"))
            {
               QJsonValue value = object.value("From");
                if(value.isDouble())
                {
                    int nFrom = value.toVariant().toInt();
                   qDebug() << "From : " << nFrom;
                }
            }

            if (object.contains("Cross Platform"))
            {
               QJsonValue value = object.value("Cross Platform");
                if(value.isBool())
                {
                   bool bCrossPlatform = value.toBool();
                   qDebug() << "CrossPlatform : " << bCrossPlatform;
                }
            }

            if (object.contains("other"))
            {
               QJsonValue value = object.value("other");
                if(value.isArray())
                {
                    QJsonArray array = value.toArray();
                    int size = array.size();
                    for (int i = 0; i < size; i++)
                    {
                        QJsonValue value = array.at(i);
                        if (value.isDouble())
                        {
                            double result = value.toDouble();
                            qDebug() << " " << result;
                        }
                        if (value.isBool())
                        {
                            bool result = value.toBool();
                            qDebug() << " " << result;
                        }
                        if (value.isString())
                        {
                            QString result = value.toString();
                            qDebug() << " " << result;
                        }
                    }
                }
            }
        }
    }
}
